/*
 * Menu.h
 *
 *  Created on: Nov 17, 2013
 *      Author: damian
 */

#ifndef MENU_H_
#define MENU_H_

#include <string>
#include <vector>
#include <map>
#include <iostream>
#include "../CapaLogica/Utilitarios/Utilitarios.h"

using std::string;

/*
 * Menú que muestra opciones enumeradas desde la 1 en adelante.
 * Permite desplegar mensajes de exito o fracaso para cada opcion elegida.
 */
class Menu {
private:
	std::vector<string> opciones;
	std::map<int,string> mensajes;
	std::map<int,string> subtitulos;
	string titulo;
	string salida;
	int ultimaOp;  // ultima opcion elegida por el usuario

public:
	Menu(string opciones = "");
	~Menu();

	void setTitulo(string titulo);
	void setOpcionDeSalida(string salida);
	void setMensajeDeExito(int opcion, string exito);
	void setMensajeDeFracaso(int opcion, string fracaso);
	void addSubTituloIntercalado(string subtitulo, int opcion=0);
	void addOpcion(string opcion);
	void eraseOpcion(int opcion);
	void modifOpcion(int opcion, string nombre);

	/*
	 * Muestra las opciones por pantalla y espera que el usuario
	 * elija una opcion correcta.
	 * maxOpAtOnce: permite elegir la cantidad maxima de opciones a
	 * mostrar al mismo tiempo (=0 muestra todas).
	 */
	int mostrarOpciones();
	bool mostrarMensaje(bool evaluar, int opcion=0);
	bool salir();

	int getNro(string opcion);
	int getCantidadDeOpciones();

	static char getInputChar(bool ignore = true);
	static bool pedirConfirmacion(string msj);
	static void pressEnterToContinue(string msj);
};

#endif /* MENU_H_ */
